/*
 * @Description: 挂到原型上的方法
 */
import moment from 'moment';
import ieFix from './ie-fix';
import fiberComponents from './fiber-components';

/**
 * @description: 短横线转驼峰命名
 * @param {string} name 短横线名称
 * @return {string}驼峰名称
 */
export const getCamelCase = (name) => name.replace(/-([a-z])/g, (all, i) => i.toUpperCase());

/**
 * @description: 获取指定URL参数
 * @param {string}name 参数名
 * @return {string}参数值
 */
export const getQueryString = (name) => {
  var reg = new RegExp('(^|&)' + name + '=([^&]*)(&|$)');
  var r = window.location.search.substr(1).match(reg);
  if (r != null) return unescape(r[2]);
  return '';
};

/**
 * @description: 统一“全屏”弹窗
 * @param {Object} config 传入配置
 * @return {Object}Vue.prototype.$dialog的返回值
 */
function fullDialog(config) {
  const { offsetHeight, offsetWidth } = document.documentElement;
  return fiberComponents.dialog(
    Object.assign(config, {
      width: config.width || (offsetWidth - 100),
      height: config.height || (offsetHeight - 200),
      centered: true
    })
  );
}

/**
 * @description: 毫秒字符串转成时间字符串
 * @param {String}  timestamp 传入毫秒字符串
 * @param {String}  format 时间格式化方式
 * @return {String}返回时间字符串 2022-2-12 16:24:59
 */
export function getDateString(timestamp, format = 'YYYY-MM-DD HH:mm:ss') {
  const time = +timestamp;
  if (isNaN(time)) {
    return timestamp;
  }
  return moment(time).format(format);
}

/**
 * 将时间的格式的字符串转事件戳字符串
 * @param formatDate
 * @param format
 * @returns {*}
 */
export function getTimestamp(formatDate, format = 'YYYY-MM-DD HH:mm:ss') {
  let timestamp = moment(formatDate, format).valueOf().toString();
  return timestamp;
}



/**
 * @description: 数组去重（每一项是对象）
 * @param {Array} list 待去重数组
 * @param {Function|String} reason 去重依据。函数，或者是指定字段。如果不传就按照id区分
 * @param {Function} getCustomData 自定义构造数据
 * @return {Array}去重后的数组
 */
// export function arrayRemoveDuplication(list, reason = 'id', getCustomData) {
//     if (!list?.length) return [];
//     const result = [];

//     list.forEach((item) => {
//         if (
//             typeof reason === 'string'
//                 ? !result.some((d) => d[reason] === item[reason])
//                 : reason(result, item)
//         ) {
//             result.push(getCustomData ? getCustomData(item) : item);
//         }
//     });
//     return result;
// }

//函数防抖
export function debounce(fn, delay = 500) {
  let timer;
  return function () {
    const args = arguments;
    if (timer) {
      clearTimeout(timer);
    }
    timer = setTimeout(() => {
      fn.apply(this, args);
    }, delay);
  };
}

/**
 * 把url上的所有参数提取为json对象，传递给baseInfo接口使用
 * */
export function urlParamsJson(){
  // 获取当前 URL
  const currentUrl = window.location.href;

// 创建 URLSearchParams 对象，并传入当前 URL 的 search 参数
  const searchParams = new URLSearchParams(new URL(currentUrl).search);

// 创建一个空的 JSON 对象，用于存储参数
  const paramsObject = {};

// 遍历 URLSearchParams 对象，将参数添加到 JSON 对象中
  for (const [key, value] of searchParams) {
    if (value && value !== 'null' && value !== 'undefined') {
      paramsObject[key] = value;
    }
  }

// 打印封装好的 JSON 对象
  console.log('urlParamsJson', paramsObject);
  return paramsObject;
}

/**
 * 产生UUID，返回类型是String
 */
var UUID_seqence = 0;
function getUUID() {
  var UUIDConstants_Time = new Date().getTime() + '' + UUID_seqence++;
  if (UUID_seqence >= 100000) {
    UUID_seqence = 0;
  }

  return UUIDConstants_Time;
}

/**
 * 是否是国产化操作系统
 * @return {boolean}
 */
function isChinaOs() {
  var isChina = false;
  var ua = navigator.userAgent;
  var isMSIE = navigator.appName == 'Microsoft Internet Explorer' || ua.indexOf('Trident') != -1;
  if (!isMSIE) {
    isChina = String(navigator.platform).indexOf('Linux') > -1;
  }
  return isChina;
}

export default {
  /**
   * @description: 获取正文iframe
   * @return {Object}正文iframe
   */
  getZWIframe: () => window._getZWIframe(),
  getQueryString,
  getCamelCase,
  showBaseInfo:()=>{},
  fullDialog,
  getDateString,
  debounce,
  getUUID,
  isChinaOs,
  ...ieFix,
  ...fiberComponents,
  //一些url拼接参数需要这个。目前只发现工作流相关
  getSecurityByUserId: (params = '') => window.wfAjax.getSecurityByUserId(params)
};
